package br.utfpr.edu.dao;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import sun.misc.BASE64Encoder;
import br.utfpr.edu.bean.Usuario;
import br.utfpr.edu.business.Negocio;
import br.utfpr.edu.business.NegocioException;
import br.utfpr.edu.interfaces.IUsuario;

public class UsuarioDao extends Negocio implements IUsuario{
	
	private Usuario usuario;
	private static final long serialVersionUID = -2009727781265511594L;

	public UsuarioDao(){
		usuario = new Usuario();
	}
	
	public void inserir()throws NegocioException{
		validar();
		usuario.setSenha(criptografarSenha(usuario.getSenha()));
		super.inserir(usuario);
	}
	
	public void alterar()throws NegocioException{
		validar();
		usuario.setSenha(criptografarSenha(usuario.getSenha()));
		super.alterar(usuario);
	}
	
	public void deletar()throws NegocioException{
		super.deletar(Usuario.class,usuario.getId());
	}
	
	public void limpar() {
		usuario.setEmail("");
		usuario.setId(0);
		usuario.setLogin("");
		usuario.setNome("");
		usuario.setSenha("");
	}
	
	private void validar()throws NegocioException{
		erros.limpar();
		
		if(estaVazio(usuario.getNome())){
			erros.campoObrigatorio("Nome");
		}
		
		if(estaVazio(usuario.getEmail())){
			erros.campoObrigatorio("Email");
		}else if(!validaEmail(usuario.getEmail())){
			erros.campoInvalido("Email");
		}
		
		if(estaVazio(usuario.getLogin())){
			erros.campoObrigatorio("Login");
		}
		
		if(estaVazio(usuario.getSenha())){
			erros.campoObrigatorio("Senha");
		}
		
		if(erros.existe()){
			throw new NegocioException(erros);
		}
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public String criptografarSenha (String senha)throws NegocioException { 
		try { 
			 MessageDigest digest = MessageDigest.getInstance("MD5"); 
			 digest.update(senha.getBytes()); 
			 BASE64Encoder encoder = new BASE64Encoder(); 
			 return encoder.encode (digest.digest()); 
		 } catch (NoSuchAlgorithmException ns) { 
			 ns.printStackTrace (); 
			 return senha; 
		 } 
	}

}
